using System;
using System.Collections.Generic;
using System.Text;
using NEXServicio;
using System.Data;

namespace NEXEntidad
{
    #region Tag
    public class Tag : NEXEntidadElemento
    {
        #region Constructores
        public Tag(int idTag,string descripcion)
            : base(idTag)
        {
            this.Id = idTag;
            this.Descripcion = descripcion;
        }
        public Tag(int idTag)
            : base(idTag)
        {
            this.Id = idTag;
        }
        public Tag()
            : base()
        {
        }
        #endregion
                
        #region Metodos de Carga
        internal static TagCollection CrearListaCargada(DataRowCollection drTags)
        {
            TagCollection tags = new TagCollection();
            foreach (DataRow drTag in drTags)
            {
                tags.Add(Tag.CrearCargado(drTag));
            }
            return tags;
        }

        private static Tag CrearCargado(DataRow drTag)
        {
            Tag tag = new Tag(Convert.ToInt32(drTag["idTag"].ToString()));
            Tag.Cargar(tag, drTag);
            return tag;
        }

        private static void Cargar(Tag tag, DataRow drTag)
        {
            tag.Id = Convert.ToInt32(drTag["IdTag"].ToString(), System.Globalization.CultureInfo.CurrentCulture);
            tag.Descripcion = drTag["Descripcion"].ToString();
            tag.ObjetoCargado();
        }
        #endregion

        #region Metodos Privados
        protected override void Obtener()
        {
            throw new Exception("The method or operation is not implemented.");
        }
        #endregion

        #region Metodos Publicos
        public static TagCollection Listar(string nombre)
        {
            return Tag.CrearListaCargada(ServicioTag.Listar(nombre).Tables[ServicioTag.DataTableName].Rows);
        }
        public static TagCollection ListarPorLibro(Int32 idLibro)
        {
            return Tag.CrearListaCargada(ServicioTag.ListarPorLibro(idLibro).Tables[ServicioTag.DataTableName].Rows);
        }
        public override string ToString()
        {
            return this.Descripcion;
        }
        #endregion

        #region Metodos para Salvar
        protected override int SalvarObjeto(NEX_Datos.Transaccion transaccion)
        {
            Int32 idTag = ServicioTag.Salvar(transaccion, this.Id, this.Descripcion);
            return idTag;
        }

        #endregion
    }
    #endregion


    #region TagCollection

    [Serializable]
    public class TagCollection : NEXCollection<Tag>
    {
    }

    #endregion
}
